package top.itaso.app.vo

/**
 * @Description: 多级树节点实体类
 * @Author dengfu.su
 * @Date 2023/3/6
 */
class NodeKt<T> {

    /**
     * 当前节点id
     */
    var id: String = ""

    /**
     * 父节点id
     */
    var pid: String = ""

    /**
     * 节点名称
     */
    var name: String = ""

    /**
     * 当前节点级别
     */
    var level: Int = -1
        get() {
            return if (parentNode == null) {
                0
            } else {
                parentNode!!.level + 1
            }
        }

    /**
     * 当前节点是否选中状态
     */
    var isChecked: Boolean = false

    /**
     * 节点 Icon
     */
    var icon: Int = -1

    /**
     * 当前是否展开状态
     */
    var isExpand: Boolean = false
        set(value) {
            field = value
            if (!field) {//展开时一级级展开，关闭时一次性关闭
                for (node in children) {
                    node.isExpand = field
                }
            }
        }

    /**
     * 展开图标，如箭头
     */
    var iconExpand: Int = -1

    /**
     * 非展开图标，如箭头
     */
    var iconUnExpand: Int = -1

    /**
     * 当前节点数据
     */
    var data: T? = null

    /**
     * 父节点数据
     */
    var parentNode: NodeKt<T>? = null

    /**
     * 子节点数据
     */
    var children: List<NodeKt<T>> = mutableListOf()

    /**
     * @return 当前是否为根节点
     */
    fun isRootNode(): Boolean {
        return parentNode == null
    }

    /**
     * @return 判断父节点是否展开
     */
    fun isParentExpand(): Boolean {
        return parentNode?.isParentExpand() ?: false
    }

    /**
     * @return 当前是否叶子节点，即最后一级
     */
    fun isLeaf(): Boolean {
        return children == null || children.isEmpty()
    }

}